home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / QuickDraw3D 1.6 SDK / Mac SampleCode Previous / Grab Bag Samples - Mac / Versions / versionsTest.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-05-18  |  8.7 KB  |  302 lines  |  [TEXT/CWIE]

  1. /*
  2.  * Tests for the various ways to test the QuickDraw 3D versions.
  3.  * 
  4.  * Nick Thompson, March 1997.
  5.  * Robert Dierkes, February 1998.
  6.  *        Added support for Q3GetReleaseVersion, Q3GetVersion,
  7.  *        Q3ViewerGetReleaseVersion, and Q3ViewerGetVersion.
  8.  */
  9.  
  10. /*-----------------------------------------------------------*\
  11.  *                                                             *
  12.  * VIEWER_VERSION should be non-zero to test Viewer gestalt  *
  13.  *                                                             *
  14.  * Also WEAK LINK against QuickDraw3DViewerLib stub library  *
  15.  *                                                             *
  16. \*-----------------------------------------------------------*/
  17. #define    VIEWER_VERSION    1
  18.  
  19. /*#define    OLDROUTINENAMES    1    /* Use this until Gestalt.h is updated */
  20.  
  21. #include <stdio.h>
  22. #include <QD3D.h>
  23. #include <Gestalt.h>
  24.  
  25.  
  26. #if OLDROUTINENAMES
  27.     #include <QD3DGestalt.h>
  28. #else
  29. #endif /* OLDROUTINENAMES */
  30.  
  31. #if defined(VIEWER_VERSION) || defined(VIEWER_VERSION)
  32.     #if OLDROUTINENAMES
  33.         #include <QD3DViewerGestalt.h>
  34.     #endif /* OLDROUTINENAMES */
  35.  
  36.     #include <QD3DViewer.h>
  37. #endif /* VIEWER_VERSION */
  38.  
  39.  
  40.  
  41. /*-----------------------------------------------------------*\
  42.  *                                                             *
  43.  *         Define these values for the current version         *
  44.  *                                                                *
  45. \*-----------------------------------------------------------*/
  46.     #define    kQD3DCurrentGestaltValue            0x00010504
  47.     #define    kQD3DCurrentMajorRevision            1L
  48.     #define    kQD3DCurrentMinorRevision            5L
  49.  
  50. #if defined(VIEWER_VERSION) || defined(VIEWER_VERSION)
  51.     #define    kQD3DViewerCurrentGestaltValue        0x00010504
  52.     #define    kQD3DViewerCurrentMajorRevision        1L
  53.     #define    kQD3DViewerCurrentMinorRevision        5L
  54. #endif /* VIEWER_VERSION */
  55.  
  56.  
  57. /*-----------------------------------------------------------*\
  58.  * "Release Version" - based on format of the 'vers' resource*
  59. \*-----------------------------------------------------------*/
  60. #define kMajorPosition    24        /* bit position of major release number */
  61. #define kMinorPosition    20        /* bit position of minor release number */
  62. #define kDotPosition    16        /* bit position of dot   release number */
  63. #define kMajorMask        (0xFF << kMajorPosition)
  64. #define kMinorMask        (0x0F << kMinorPosition)
  65. #define kDotMask        (0x0F << kDotPosition)
  66.  
  67. #define    RELEASE_TO_MAJOR_MINOR_DOT(_release,_major,_minor,_dot)    \
  68.         _major = (_release & kMajorMask) >> kMajorPosition;        \
  69.         _minor = (_release & kMinorMask) >> kMinorPosition;        \
  70.         _dot   = (_release & kDotMask)   >> kDotPosition;
  71.  
  72. /*-----------------------------------------------------------*\
  73.  * Gestalt Version number                                     *
  74. \*-----------------------------------------------------------*/
  75. #define kGestaltMajorPosition    16        /* bit position of major release number */
  76. #define kGestaltMinorPosition     8        /* bit position of minor release number */
  77. #define kGestaltDotPosition          0        /* bit position of dot   release number */
  78. #define kGestaltMajorMask        (0xFF << kGestaltMajorPosition)
  79. #define kGestaltMinorMask        (0xFF << kGestaltMinorPosition)
  80. #define kGestaltDotMask            (0xFF << kGestaltDotPosition)
  81.  
  82. #define    GESTALT_TO_MAJOR_MINOR_DOT(_gestalt,_major,_minor,_dot)                                \
  83.         _major = (((unsigned long) _gestalt) & kGestaltMajorMask) >> kGestaltMajorPosition;    \
  84.         _minor = (((unsigned long) _gestalt) & kGestaltMinorMask) >> kGestaltMinorPosition;    \
  85.         _dot   = (((unsigned long) _gestalt) & kGestaltDotMask)   >> kGestaltDotPosition;
  86.  
  87.  
  88. /*
  89.  * Main
  90.  */
  91. void main(void)
  92. {
  93.     TQ3Status        status     = kQ3Failure,
  94.                     initStatus = kQ3Failure;
  95.     OSErr            osError;
  96.     long            gestaltValue;
  97.     unsigned long    releaseQd3dValue,
  98.                     releaseQd3dMajor,
  99.                     releaseQd3dMinor,
  100.                     releaseQd3dDot;
  101.     unsigned long    releaseViewer,
  102.                     releaseViewerMajor,
  103.                     releaseViewerMinor,
  104.                     releaseViewerDot;
  105.     unsigned long    gestaltMajor,
  106.                     gestaltMinor,
  107.                     gestaltDot;
  108.     unsigned long    majorRevision,
  109.                     minorRevision;
  110.     
  111.     /*---------------*
  112.      *  QuickDraw 3D *
  113.      *---------------*/
  114.  
  115.     /* Query Gestalt for presence of QuickDraw 3D */
  116.     gestaltValue = ~0;
  117.     osError = Gestalt(gestaltQD3D, &gestaltValue);
  118.  
  119.     if (osError != noErr) {
  120.         printf("Error:  Gestalt check for QuickDraw 3D extension failed; \n", osError);
  121.         goto Exit_VersionTest;
  122.     } else {
  123.         if (gestaltValue == gestaltQD3DNotPresent) {
  124.             printf("Error:  QuickDraw 3D extension isn't installed.\n");
  125.             goto Exit_VersionTest;
  126.         }
  127.         printf("QuickDraw 3D extension is installed.\n");
  128.     }
  129.  
  130.     /* Query Gestalt for QuickDraw 3D version */
  131.     gestaltValue = ~0;
  132.     osError = Gestalt(gestaltQD3DVersion, &gestaltValue);
  133.  
  134.     if (osError != noErr) {
  135.         printf("Error:  Check for Gestalt gestaltQD3DVersion failed; %d;", osError);
  136.         goto Exit_VersionTest;
  137.     } else {
  138.         if (gestaltValue != kQD3DCurrentGestaltValue) {
  139.             printf("Error:  Check for Gestalt gestaltQD3DVersion returned unexpected version 0x%08X\n", gestaltValue);
  140.             goto Exit_VersionTest;
  141.         }
  142.  
  143.         GESTALT_TO_MAJOR_MINOR_DOT(    gestaltValue,
  144.                                     gestaltMajor,
  145.                                     gestaltMinor,
  146.                                     gestaltDot);
  147.  
  148.         printf("Gestalt gestaltQD3DVersion returns %d.%d.%d\n", 
  149.                         gestaltMajor, gestaltMinor, gestaltDot);
  150.     }
  151.  
  152.  
  153.     /* Initialize QuickDraw 3D */
  154.     initStatus = Q3Initialize();
  155.     if (initStatus == kQ3Failure) {
  156.         printf("Error:  Q3Initialize failed.\n");
  157.         goto Exit_VersionTest;
  158.     }
  159.  
  160.     /*
  161.      * Q3GetReleaseVersion
  162.      */
  163.     releaseQd3dValue = ~0;
  164.     status = Q3GetReleaseVersion(&releaseQd3dValue);
  165.  
  166.     if (status == kQ3Failure) {
  167.         printf("Error:  Q3GetReleaseVersion failed.\n");
  168.         goto Exit_VersionTest;
  169.     } else {
  170.         RELEASE_TO_MAJOR_MINOR_DOT(    releaseQd3dValue,
  171.                                     releaseQd3dMajor,
  172.                                     releaseQd3dMinor,
  173.                                     releaseQd3dDot);
  174.  
  175.         if ( (gestaltMajor != releaseQd3dMajor) ||
  176.              (gestaltMinor != releaseQd3dMinor) ||
  177.              (gestaltDot   != releaseQd3dDot) )
  178.         {
  179.             printf("Error:  Inconsistent version numbers - Gestalt returns %d.%d.%d"
  180.                     " while Q3GetReleaseVersion returns %d.%d.%d\n", 
  181.                             gestaltMajor,     gestaltMinor,     gestaltDot,
  182.                             releaseQd3dMajor, releaseQd3dMinor, releaseQd3dDot);
  183.             goto Exit_VersionTest;
  184.         }
  185.         printf("Q3GetReleaseVersion returns %d.%d.%d\n", 
  186.                         releaseQd3dMajor, releaseQd3dMinor, releaseQd3dDot);
  187.     }
  188.  
  189.  
  190.     /*
  191.      * Q3GetVersion
  192.      */
  193.     majorRevision = ~0;
  194.     minorRevision = ~0;
  195.     status = Q3GetVersion(&majorRevision, &minorRevision);
  196.  
  197.     if (status == kQ3Failure) {
  198.         printf("Error:  Q3GetVersion failed.\n");
  199.         goto Exit_VersionTest;
  200.     } else {
  201.         if ( (majorRevision != kQD3DCurrentMajorRevision) ||
  202.              (minorRevision != kQD3DCurrentMinorRevision) )
  203.         {
  204.             printf("Error:  Incorrect version number - Q3GetVersion returns %d.%d\n", 
  205.                             majorRevision, minorRevision);
  206.             goto Exit_VersionTest;
  207.         }
  208.         printf("Q3GetVersion returns %d.%d\n", 
  209.                         majorRevision, minorRevision);
  210.     }
  211.  
  212.  
  213.  
  214. #if defined(VIEWER_VERSION) || defined(VIEWER_VERSION)
  215.  
  216.     printf("\n");
  217.  
  218.     /*----------------------*
  219.      *  QuickDraw 3D Viewer *
  220.      *----------------------*/
  221.  
  222.     /* Gestalt for presence of QuickDraw 3D Viewer */
  223.     gestaltValue = ~0;
  224.     osError = Gestalt(gestaltQD3DViewer, &gestaltValue);
  225.  
  226.     if (osError != noErr ) {
  227.         printf("Error:  Check for Gestalt gestaltQD3DViewer failed; \n", osError);
  228.         goto Exit_VersionTest;
  229.     } else {
  230.         if ((gestaltValue & (1 << gestaltQD3DViewerPresent)) == 0) {
  231.             printf("Error:  QuickDraw 3D Viewer isn't installed.\n");
  232.             goto Exit_VersionTest;
  233.         }
  234.         printf("QuickDraw 3D Viewer is installed.\n");
  235.     }
  236.     
  237.     /* (No Gestalt for QuickDraw 3D Viewer version) */
  238.  
  239.     /*
  240.      * Q3ViewerGetReleaseVersion
  241.      */
  242.     releaseViewer = ~0;
  243.     osError = Q3ViewerGetReleaseVersion(&releaseViewer);
  244.  
  245.     if (osError != noErr ) {
  246.         printf("Error:  Q3ViewerGetReleaseVersion failed.\n");
  247.         goto Exit_VersionTest;
  248.     } else {
  249.         RELEASE_TO_MAJOR_MINOR_DOT(    releaseViewer,
  250.                                     releaseViewerMajor,
  251.                                     releaseViewerMinor,
  252.                                     releaseViewerDot);
  253.  
  254.         /* Compare Viewer release version with QD3D release version */
  255.         if ( (releaseViewerMajor != releaseQd3dMajor) ||
  256.              (releaseViewerMinor != releaseQd3dMinor) ||
  257.              (releaseViewerDot   != releaseQd3dDot) )
  258.         {
  259.             printf("Error:  Unexpected version number from Q3ViewerGetReleaseVersion - returned %d.%d.%d", 
  260.                             releaseViewerMajor, releaseViewerMinor, releaseViewerDot);
  261.             goto Exit_VersionTest;
  262.         }
  263.         printf("Q3ViewerGetReleaseVersion returns %d.%d.%d\n", 
  264.                         releaseViewerMajor, releaseViewerMinor, releaseViewerDot);
  265.     }
  266.  
  267.     /*
  268.      * Q3ViewerGetVersion
  269.      */
  270.     majorRevision = ~0;
  271.     minorRevision = ~0;
  272.     osError = Q3ViewerGetVersion(&majorRevision, &minorRevision);
  273.  
  274.     if (osError != noErr) {
  275.         printf("Error:  Q3GetVersion failed.\n");
  276.         goto Exit_VersionTest;
  277.     } else {
  278.         if ( (majorRevision != kQD3DViewerCurrentMajorRevision) ||
  279.              (minorRevision != kQD3DViewerCurrentMinorRevision) )
  280.         {
  281.             printf("Error:  Incorrect version number - Q3ViewerGetVersion returns %d.%d", 
  282.                             majorRevision, minorRevision);
  283.             goto Exit_VersionTest;
  284.         }
  285.         printf("Q3ViewerGetVersion returns %d.%d\n", 
  286.                         majorRevision, minorRevision);
  287.     }
  288.  
  289. #endif /* VIEWER_VERSION */
  290.  
  291.  
  292. Exit_VersionTest:
  293.  
  294.     if (initStatus == kQ3Success) {
  295.         status = Q3Exit();
  296.         if (status == kQ3Failure) {
  297.             printf("Error:  Q3Exit failed.\n");
  298.         }
  299.     }
  300. }
  301.  
  302.